/*
 * CGlobal.cpp - Grupo 5 - Prog. Avanzada 2011
 *
 *  Javier Dominguez - 4.901.161-6
 *  Marcelo Parada - 1.977.094-9
 *  Rodrigo Ruiz - 4.481.611-2
 *  Maximiliano Silvera - 4.106.938-6
 */

#include "CGlobal.h"

CGlobal::CGlobal()
{
}

void CGlobal::ingresarDatosPrueba()
{
	/*
	 * Creo los usuarios
	 */
	UsuarioDT *aperez = new UsuarioDT("aperez", "Alberto Perez", "jperez@redmusical.com");
	UsuarioDT *jhornos = new UsuarioDT("jhornos", "Juan Hornos", "jhorno@redmusical.com");
	UsuarioDT *bnieves = new UsuarioDT("bnieves", "Blanca Nieves", "bnieves@redmusical.com");
	UsuarioDT *ngimenez = new UsuarioDT("ngimenez", "Nestor Gimenez", "ngimenez@redmusical.com");

	ColConcrete<UsuarioDT*> *usuarios = new ColConcrete<UsuarioDT*>();
	usuarios->add(aperez);
	usuarios->add(jhornos);
	usuarios->add(bnieves);
	usuarios->add(ngimenez);

	ConcreteIterator<UsuarioDT*> *iterUsuarios = usuarios->getIterator();
	while(iterUsuarios->hasCurrent())
	{
		HUsuario::getInstance()->crearUsuario(iterUsuarios->current());
		iterUsuarios->next();
	}

	/*
	 * Creo los artistas
	 */
	SolistaDT *alcides = new SolistaDT("Alcides");
	SolistaDT *shakira = new SolistaDT("Shakira");
	SolistaDT *cent = new SolistaDT("50 Cent");
	SolistaDT *daddy = new SolistaDT("Daddy Yankee");
	SolistaDT *gardel = new SolistaDT("Carlos Gardel");
	SolistaDT *fergie = new SolistaDT("Fergie");
	SolistaDT *fito = new SolistaDT("Fito Paez");
	BandaDT *blackEyed= new BandaDT("Black Eyed Peas", 4);
	BandaDT *buitres = new BandaDT("Buitres", 5);
	BandaDT *champions = new BandaDT("Champions Liga", 6);
	BandaDT *u2 = new BandaDT("U2", 4);
	BandaDT *metallica = new BandaDT("Metallica", 4);
	BandaDT *pericos = new BandaDT("Los pericos", 8);
	BandaDT *autenticos = new BandaDT("Los Autenticos Decadentes", 12);

	ColConcrete<ArtistaDT*> *artistas = new ColConcrete<ArtistaDT*>();
	artistas->add(alcides);
	artistas->add(shakira);
	artistas->add(cent);
	artistas->add(daddy);
	artistas->add(gardel);
	artistas->add(fergie);
	artistas->add(fito);
	artistas->add(blackEyed);
	artistas->add(buitres);
	artistas->add(champions);
	artistas->add(u2);
	artistas->add(metallica);
	artistas->add(pericos);
	artistas->add(autenticos);

	ConcreteIterator<ArtistaDT*> *iterArtistas = artistas->getIterator();
	while(iterArtistas->hasCurrent())
	{
		HElemento::getInstance()->crearArtista(iterArtistas->current());
		iterArtistas->next();
	}

	/*
	 * Creo los albumes
	 */
	AlbumDT *periplo = new AlbumDT("Periplo", 2005);
	AlbumDT *difusion = new AlbumDT("Difusion", 2010);
	AlbumDT *theEnd = new AlbumDT("The End", 2009);
	AlbumDT *noLine = new AlbumDT("No Line", 2009);
	AlbumDT *vivos = new AlbumDT("1000 Vivos", 2000);

	ColConcrete<AlbumDT*> *albumes = new ColConcrete<AlbumDT*>();
	albumes->add(periplo);
	albumes->add(difusion);
	albumes->add(theEnd);
	albumes->add(noLine);
	albumes->add(vivos);

	ConcreteIterator<AlbumDT*> *iterAlbumes = albumes->getIterator();
	while(iterAlbumes->hasCurrent())
	{
		HElemento::getInstance()->crearAlbum(iterAlbumes->current());
		iterAlbumes->next();
	}

	// Asocio los artistas de cada album
	HElemento::getInstance()->asociarArtistaAlbum(buitres, periplo);
	HElemento::getInstance()->asociarArtistaAlbum(champions, difusion);
	HElemento::getInstance()->asociarArtistaAlbum(fergie, theEnd);
	HElemento::getInstance()->asociarArtistaAlbum(blackEyed, theEnd);
	HElemento::getInstance()->asociarArtistaAlbum(u2, noLine);
	HElemento::getInstance()->asociarArtistaAlbum(pericos, vivos);

	/*
	 * Creo los Temas
	 */
	SingleDT *violeta = new SingleDT(1985, "Violeta", new Tiempo(3, 14));
	SingleDT *sopaCaracol = new SingleDT(1980, "Sopa de Caracol", new Tiempo(2,48));
	SingleDT *unaCabeza = new SingleDT(1935, "Por una cabeza", new Tiempo(4,10));
	SingleDT *unaNoche = new SingleDT(1996, "Una noche", new Tiempo(3,29));
	SingleDT *impacto = new SingleDT(2007, "Impacto", new Tiempo(4,20));
	SingleDT *vertigo = new SingleDT(2006, "Vertigo", new Tiempo(4,10));
	SingleDT *one = new SingleDT(1998, "One", new Tiempo(7,24));
	SingleDT *inferno = new SingleDT(2008, "Disco Inferno", new Tiempo(3,34));
	SingleDT *hipsDont = new SingleDT(2006, "Hips Dont Lie", new Tiempo(3,50));
	PistaDT *iFeeling = new PistaDT(1, "I Gotta a Feeling", new Tiempo(3,56));
	PistaDT *alive = new PistaDT(2, "Alive", new Tiempo(3,15));
	PistaDT *magnificent = new PistaDT(1, "Magnificent", new Tiempo(5,15));
	PistaDT *cazador = new PistaDT(1, "El cazador", new Tiempo(3,45));
	PistaDT *final = new PistaDT(2, "Final", new Tiempo(2,47));
	PistaDT *ojos = new PistaDT(3, "Ojos", new Tiempo(2,59));
	PistaDT *tu = new PistaDT(1, "Tu", new Tiempo(3, 15));
	PistaDT *besame = new PistaDT(2, "Besame", new Tiempo(3,33));
	PistaDT *dejaDeLlorar = new PistaDT(3, "Deja de Llorar", new Tiempo(4,30));
	PistaDT *homeSweet = new PistaDT(1, "Home Sweet Home", new Tiempo(3,40));
	PistaDT *ochoRios = new PistaDT(2, "Ocho Rios", new Tiempo(3,28));
	PistaDT *pupilas = new PistaDT(3, "Pupilas Lejanas", new Tiempo(3,50));
	PistaDT *waitin = new PistaDT(4, "Waitin", new Tiempo(2,50));

	ColConcrete<TemaDT*> *temas = new ColConcrete<TemaDT*>();
	temas->add(violeta);
	temas->add(sopaCaracol);
	temas->add(unaCabeza);
	temas->add(unaNoche);
	temas->add(impacto);
	temas->add(vertigo);
	temas->add(one);
	temas->add(inferno);
	temas->add(hipsDont);
	temas->add(iFeeling);
	temas->add(alive);
	temas->add(magnificent);
	temas->add(cazador);
	temas->add(final);
	temas->add(ojos);
	temas->add(tu);
	temas->add(besame);
	temas->add(dejaDeLlorar);
	temas->add(homeSweet);
	temas->add(ochoRios);
	temas->add(pupilas);
	temas->add(waitin);

	ConcreteIterator<TemaDT*> *iterTemas = temas->getIterator();
	while(iterTemas->hasCurrent())
	{
		iterTemas->current()->setId(HElemento::getInstance()->crearTema(iterTemas->current()));
		iterTemas->next();
	}

	// Asocio los artistas de cada tema
	HElemento::getInstance()->asociarArtistaTema(alcides, violeta);
	HElemento::getInstance()->asociarArtistaTema(alcides, sopaCaracol);
	HElemento::getInstance()->asociarArtistaTema(buitres, cazador);
	HElemento::getInstance()->asociarArtistaTema(buitres, final);
	HElemento::getInstance()->asociarArtistaTema(buitres, ojos);
	HElemento::getInstance()->asociarArtistaTema(champions, tu);
	HElemento::getInstance()->asociarArtistaTema(champions, besame);
	HElemento::getInstance()->asociarArtistaTema(champions, dejaDeLlorar);
	HElemento::getInstance()->asociarArtistaTema(gardel, unaCabeza);
	HElemento::getInstance()->asociarArtistaTema(buitres, unaNoche);
	HElemento::getInstance()->asociarArtistaTema(daddy, impacto);
	HElemento::getInstance()->asociarArtistaTema(fergie, impacto);
	HElemento::getInstance()->asociarArtistaTema(fergie, iFeeling);
	HElemento::getInstance()->asociarArtistaTema(blackEyed, iFeeling);
	HElemento::getInstance()->asociarArtistaTema(blackEyed, alive);
	HElemento::getInstance()->asociarArtistaTema(u2, magnificent);
	HElemento::getInstance()->asociarArtistaTema(u2, vertigo);
	HElemento::getInstance()->asociarArtistaTema(metallica, one);
	HElemento::getInstance()->asociarArtistaTema(cent, inferno);
	HElemento::getInstance()->asociarArtistaTema(shakira, hipsDont);
	HElemento::getInstance()->asociarArtistaTema(pericos, homeSweet);
	HElemento::getInstance()->asociarArtistaTema(autenticos, homeSweet);
	HElemento::getInstance()->asociarArtistaTema(pericos, ochoRios);
	HElemento::getInstance()->asociarArtistaTema(fito, ochoRios);
	HElemento::getInstance()->asociarArtistaTema(pericos, pupilas);
	HElemento::getInstance()->asociarArtistaTema(pericos, waitin);

	// Asocio los albumes a las pistas
	HElemento::getInstance()->asociarAlbumPista(periplo, cazador);
	HElemento::getInstance()->asociarAlbumPista(periplo, final);
	HElemento::getInstance()->asociarAlbumPista(periplo, ojos);
	HElemento::getInstance()->asociarAlbumPista(difusion, tu);
	HElemento::getInstance()->asociarAlbumPista(difusion, besame);
	HElemento::getInstance()->asociarAlbumPista(difusion, dejaDeLlorar);
	HElemento::getInstance()->asociarAlbumPista(theEnd, iFeeling);
	HElemento::getInstance()->asociarAlbumPista(theEnd, alive);
	HElemento::getInstance()->asociarAlbumPista(noLine, magnificent);
	HElemento::getInstance()->asociarAlbumPista(vivos, homeSweet);
	HElemento::getInstance()->asociarAlbumPista(vivos, ochoRios);
	HElemento::getInstance()->asociarAlbumPista(vivos, pupilas);
	HElemento::getInstance()->asociarAlbumPista(vivos, waitin);

	/*
	 * Creo las etiquetas
	 */
	EtiquetaDT *cumbia = new EtiquetaDT("Cumbia");
	EtiquetaDT *rock = new EtiquetaDT("Rock");
	EtiquetaDT *pop = new EtiquetaDT("Pop");
	EtiquetaDT *reggaeton = new EtiquetaDT("Reggaeton");
	EtiquetaDT *vivo = new EtiquetaDT("En Vivo");
	EtiquetaDT *uruguay = new EtiquetaDT("Uruguay");

	ColConcrete<EtiquetaDT*> *etiquetas = new ColConcrete<EtiquetaDT*>();
	etiquetas->add(cumbia);
	etiquetas->add(rock);
	etiquetas->add(pop);
	etiquetas->add(reggaeton);
	etiquetas->add(vivo);
	etiquetas->add(uruguay);

	ConcreteIterator<EtiquetaDT*> *iterEtiquetas = etiquetas->getIterator();
	while(iterEtiquetas->hasCurrent())
	{
		HEtiqueta::getInstance()->crearEtiqueta(iterEtiquetas->current());
		iterEtiquetas->next();
	}

	// Asocio los albumes a la etiqueta
	HEtiqueta::getInstance()->asociarElementoEtiqueta(difusion, cumbia);
	HEtiqueta::getInstance()->asociarElementoEtiqueta(periplo, rock);
	HEtiqueta::getInstance()->asociarElementoEtiqueta(noLine, rock);
	HEtiqueta::getInstance()->asociarElementoEtiqueta(vivos, vivo);

	// Asocio los artistas a la etiqueta
	HEtiqueta::getInstance()->asociarElementoEtiqueta(alcides, cumbia);
	HEtiqueta::getInstance()->asociarElementoEtiqueta(champions, cumbia);
	HEtiqueta::getInstance()->asociarElementoEtiqueta(u2, rock);
	HEtiqueta::getInstance()->asociarElementoEtiqueta(metallica, rock);
	HEtiqueta::getInstance()->asociarElementoEtiqueta(shakira, rock);
	HEtiqueta::getInstance()->asociarElementoEtiqueta(fito, rock);
	HEtiqueta::getInstance()->asociarElementoEtiqueta(shakira, pop);
	HEtiqueta::getInstance()->asociarElementoEtiqueta(daddy, reggaeton);
	HEtiqueta::getInstance()->asociarElementoEtiqueta(gardel, uruguay);
	HEtiqueta::getInstance()->asociarElementoEtiqueta(buitres, uruguay);

	// Creo las reproducciones
	ColConcrete<ReproduccionDT*> *reproducciones = new ColConcrete<ReproduccionDT*>();
	reproducciones->add(new ReproduccionDT(2, dejaDeLlorar->getId(), ngimenez->getNick(), new Fecha(2,2,2010,0,0)));
	reproducciones->add(new ReproduccionDT(3, magnificent->getId(), ngimenez->getNick(), new Fecha(3,2,2010,0,0)));
	reproducciones->add(new ReproduccionDT(1, vertigo->getId(), aperez->getNick(), new Fecha(1,2,2010,0,0)));
	reproducciones->add(new ReproduccionDT(2, magnificent->getId(), jhornos->getNick(), new Fecha(1,1,2010,0,0)));
	reproducciones->add(new ReproduccionDT(4, ochoRios->getId(), jhornos->getNick(), new Fecha(4,2,2010,0,0)));
	reproducciones->add(new ReproduccionDT(4, impacto->getId(), bnieves->getNick(), new Fecha(1,2,2010,0,0)));
	reproducciones->add(new ReproduccionDT(2, ochoRios->getId(), bnieves->getNick(), new Fecha(1,1,2010,0,0)));

	ConcreteIterator<ReproduccionDT*> *iterRep = reproducciones->getIterator();
	while(iterRep->hasCurrent())
	{
		HUsuario::getInstance()->crearReproduccion(iterRep->current());
		iterRep->next();
	}

	/*
	 * Elimino todos los DT destruyendo las colecciones
	 */
	delete usuarios;
	delete artistas;
	delete albumes;
	delete temas;
	delete etiquetas;
	delete reproducciones;

}

CGlobal::~CGlobal()
{
}
